#!/bin/bash

CONF=~/.cplus
DEST=/var/lib/mldonkey/chroot/tank/divx/Divers/CanalPlus
maxtries=150
EXCLUDE="JEUX_VIDEO|FABULOUS_SPORTS"
INCLUDE="MOULOUD"

# cplusgrab is part of code.google.com/p/camtools
# Copyright 2007 Camille Huot
# and is licensed under http://www.gnu.org/copyleft/gpl.html

# alors, cplusgrab est le successeur de "cplus". cplus permettait de lire les
# videos de Canal Plus disponibles sur le net directement avec mplayer.
# cplusgrab, lui, télécharge les videos en local pour pouvoir les voir quand on
# veut.

# la motivation de ce script est le changement d'architecture d'hébergement des
# videos qui faisait que l'ancien cplus ne fonctionnait plus depuis l'été 2007.

# attention, les fichiers sont au format Flash Video (.flv). le décodeur
# ffmpeg, que l'on trouve par exemple dans mplayer, sait lire ces videos.

# ce script a besoin d'un fichier ~/.cplusgrabrc pour fonctionner, celui-ci
# doit être accessible en écriture. s'il n'existe pas, cplusgrab en créera un
# par défaut avant de commencer le téléchargement.

# fonctionnement de cplusgrab : le script va "essayer" des numéros (variable
# COUNT) en ordre croissant, jusqu'à ce qu'il tombe sur une vidéo. dans ce cas,
# il décide s'il doit la télécharger ou pas. il n'y a donc pas forcément une
# vidéo au bout de chaque numéro. au bout de MAXTRIES on arrête car il est
# probable qu'on ait téléchargé la dernière vidéo. par défaut, le script
# telecharge la video si le nom du fichier contient "EMISSION". il est possible
# de modifier ce comportement en utilisant les variables EXCLUDE et INCLUDE qui
# spécifient des patterns (séparées par |) à respectivement interdire le
# téléchargement ou le forcer. les vidéos sont téléchargées dans le répertoire
# spécifié par la variable DEST.



### valeurs par défaut des variables

DEST=.
MAXTRIES=150
EXCLUDE=NOTHING
INCLUDE=NOTHING
COUNT=45000

### chargement 

cd $DEST
[ $? -eq 0 ] || exit

declare -i count=0
[ -r "$CONF" ] && count=$(cat $CONF)
[ $count -lt 45000 ] && count=45000

echo "Starting at count=$count"

miss=0
while true; do
 url=$(curl -sd video%5Fid=$count http://www.canalplus.fr/flash/xml/module/embed-video-player/embed-video-player.php | grep '<hi>' | sed 's/..<hi><!\[CDATA\[\(.*flv\)\]\]><\/hi>.*/\1/')
 if echo $url|grep -q ^http; then
  [ $miss -ne 0 ] && echo "Success after $miss tries"
  miss=0
  let count++
  if { echo $url | grep -q EMISSION && ! echo $url |egrep -q "($EXCLUDE)"; } || echo $url | egrep -q "($INCLUDE)"; then
   echo -n "Grabbing $url... "
   wget --quiet $url
   if [ $? -eq 0 ]; then echo OK; else echo FAILED; fi
  else
   echo "Skipping $url, not an EMISSION"
  fi
  continue
 fi
 let miss++
 let count++
 echo $count > $CONF
 echo "count=$count"
 if [ $miss -gt $maxtries ]; then
  echo "Giving up after $maxtries tries"
  echo $(($count-$maxtries)) > $CONF
  exit
 fi
done

